package com.ccp.dev.form.dao;

import com.ccp.dev.core.basic.base.IBaseMapper;
import com.ccp.dev.core.basic.web.query.QueryFilter;
import com.ccp.dev.form.model.FormDef;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * BPM_FORM_DEF Dao对象
 *
 * @author zhaowj
 */
public interface FormDefDao extends IBaseMapper<FormDef, String> {

    /**
     * 判断表是否定义了表单
     *
     * @param tableId
     * @return
     */
    int isTableBindForm(String tableId);

    /**
     * 获得表是否有数据。
     *
     * @param table
     * @return
     */
    int isTableHasData(Map table);

    /**
     * 根据表单key和是否是默认版本获取表单列表。
     *
     * @param formKey   表单key
     * @param isDefault 是否是默认版本
     * @return List<FormDef>
     */
    List<FormDef> getByFormKeyIsDefault(@Param("formKey") String formKey, @Param("isDefault") Short isDefault);

    /**
     * 修改表单分类
     *
     * @param categoryId  分类id
     * @param formKeyList formKey集合
     */
    void updCategory(@Param("categoryId") String categoryId, @Param("formKeyList") List<String> formKeyList);

    /**
     * 获取当前表单的最大版本。
     *
     * @param formKey 表单别名
     * @return Integer
     */
    Integer getMaxVersionByFormKey(String formKey);

    /**
     * 获得已发布版本数量
     *
     * @param formKey 表单别名
     * @return int
     */
    int getCountByFormKey(String formKey);

    /**
     * 判断表单是否已经被流程使用
     *
     * @param formKey 表单key
     * @return 记录条数
     */
    Integer getFlowUsed(String formKey);

    /**
     * 获得默认版本
     *
     * @param formKey 表单别名
     * @return 默认的表单对象
     */
    FormDef getDefaultVersionByFormKey(String formKey);


    /**
     * 根据表单key删除表单
     *
     * @param formKey 表单别名
     */
    void delByFormKey(String formKey);

    /**
     * 根据表单key获取已发布的默认版本的表单
     * @param formKey
     * @return
     */
    FormDef getDefaultPublishedByFormKey(String formKey);

    /**
     * 根据流程定义ID，节点ID，取得流程表单定义
     * @param procDefId 流程id
     * @param nodeId 节点id
     * @return
     */
    List<FormDef> getByActDefIdAndNodeId(@Param("procDefId")String procDefId,@Param("nodeId")String nodeId);
    /**
     * 根据流程定义ID，表单设置类型，取得流程表单定义
     * @param procDefId 流程id
     * @param type 类型
     * @return
     */
    List<FormDef> getByActDefIdAndSetType(@Param("procDefId")String procDefId,@Param("type")Short type);

    /**
     * 根据表单别名查询表是否版本控制
     *
     * @param formKey 表单别名
     * @return 表版本控制 needVer
     */
    Integer getNeedVerByFormKey(String formKey);

    /**
     * 根据流程定义ID获取表单定义。
     * @param id
     * @return
     */
    List<FormDef> queryByProcDefId(String id);
}
